package com.jh.calendar;

public class CalendarTest 
{
	//평년
	public final int[] PLAIN = {31,28,31,30,31,30,31,31,30,31,30,31};
	
	//윤년
	public final int[] LEAP = {31,29,31,30,31,30,31,31,30,31,30,31};
	
	//윤년을 판단하는 메서드
	public boolean isLeapYear(int year)
	{
		boolean isS = false;
		
		if ((year%4 == 0 && year % 10!=0) || (year%400==0)) 
		{
			isS=true;
		}
		
		return isS;
	}//isLeapYear
	
	//구하고 싶은  년도의 전년도 까지의 경과일(총일수)를 구하는 메서드
	public int days(int year)
	{
		int tot = 0;
		
		for (int i = 1; i < year; i++) 
		{
			if (isLeapYear(i)) 
			{
				tot+=366;
			}
			else
			{
				tot+=365;
			}
		}
		
		return tot;
	}//day year
	
	//구하고 싶은 달의 전달까지의 경과일을 구하는 메서드
	public int days(int year, int month)
	{
		int tot = days(year);
		
		for (int i = 0; i < month; i++) 
		{
			if (isLeapYear(i)) 
			{
				tot+=LEAP[i-1];
			}
			else
			{
				tot+=PLAIN[i-1];
			}
		}
		return tot;
	}//days year month
	
	//현재 날짜 까지의  대한 경과일 구하는 메서드
	public int days(int year, int month, int day)
	{
		return days(year, month)+day;
	}
	
	//월의 마지막 날을 구하는 메서드
	public int lastDay(int year, int month)
	{
		return isLeapYear(year)?LEAP[month -1 ] : PLAIN[month -1]; //삼항 연산자
	}
	
	//달력 폼 만들기
	public void calendar(int year, int month)
	{
		System.out.printf("          %d년 %d월\n",year,month);
		System.out.println("일\t월\t화\t수\t목\t금\t토");
		
		int dayOfWeek = 1+(days(year,month,1)%7)-1;
		
		for (int i = 0; i < dayOfWeek; i++) 
		{
			System.out.print("\t");
		}
		for (int i = (lastDay(year, month-1)-dayOfWeek); i < dayOfWeek; i++) {
			
		}
		
		for (int i = 1; i <= lastDay(year, month); i++) 
		{
			System.out.print(i + "\t");
			if ((i+dayOfWeek)%7==0) 
			{
				System.out.println();
			}
		}
		System.out.println("\n");
	}
	
	public void calPrint(int year)
	{
		for (int i = 1; i < 13; i++) 
		{
			calendar(year, i);
		}
	}
	
	public void printCal(int year, int month)
	{
		int s = (days(year,month)-1+1)%7;
		for (int i = 1; i < s; i++) 
		{
			System.out.print("\t");
		}
		for (int i = 0; i < lastDay(year, month); i++) 
		{
			
		}
	}
	
	public int dayofEnd(int dayOfweek, int lastDay)
	{
		int dayOfEnd = 7-((dayOfweek+lastDay)%7);
		
		if (dayOfEnd == 7) 
		{
			dayOfEnd = 0;
		}
		return dayOfEnd;
	}
	
}
